package org.fisco.bcos.evidence.gateway.utils.string;

import java.text.ParseException;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Format {
    /**
     * @param code
     * @param num  对其长度
     * @return
     * @Function 对其函数，不够位数的在前面补0，保留num的长度位数字
     */
    public static String formatCode(long code, int num) {
        String result = "";
        // 保留num的位数
        // 0 代表前面补充0
        // num 代表长度为4
        // d 代表参数为正数型
        result = String.format("%0" + num + "d", code);
        return result;
    }

    public static String formatCode(int code, int num) {
        String result = "";
        // 保留num的位数
        // 0 代表前面补充0
        // num 代表长度为4
        // d 代表参数为正数型
        result = String.format("%0" + num + "d", code);
        return result;
    }

    public static String formatDate(Date date) {
        if (date == null) {
            return "";
        }
        //小写的mm表示的是分钟
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        return sdf.format(date);
    }


    public static Date formatDateTime(String date) {
        //小写的mm表示的是分钟
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date o = new Date();
        try {
            o = sdf.parse(date);
        } catch (ParseException e) {
            System.out.print("Date error" + e);
        }
        return o;
    }

    /**
     * 获取现在时间
     *
     * @return 返回时间类型 yyyy-MM-dd HH:mm:ss
     */
    public static Date getNowDate() {
        Date currentTime = new Date();
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String dateString = formatter.format(currentTime);
        ParsePosition pos = new ParsePosition(0);
        Date currentTime_2 = formatter.parse(dateString, pos);
        return currentTime_2;
    }

    public static String getNowDateString() {
        Date currentTime = new Date();
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String dateString = formatter.format(currentTime);
        return dateString;
    }

    public static Date formatDate(String date) {
        if (StringUtils.isBlank(date)) return null;
        //小写的mm表示的是分钟
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date o;
        try {
            o = sdf.parse(date);
        } catch (ParseException e) {
            System.out.print("Date not yyyy-MM-dd format" + e);
            //小写的mm表示的是分钟
            sdf = new SimpleDateFormat("yyyy-MM-dd");
            try {
                o = sdf.parse(date);
            } catch (Exception ee) {
                System.out.print("Date not yyyy-MM-dd HH:mm:ss format" + e);
                return null;
            }
        }
        return o;
    }

    public static String formatDay(Date date) {
        if (date == null) return "";
        //小写的mm表示的是分钟
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        return sdf.format(date);
    }

    /**
     * 返回相差的时间
     * 5分钟之内，是刚刚
     * 60分钟之内，返回时间
     * 其他返回时间
     **/
    public static String diffTimme(Date date) {
        if (date == null) return "时间丢失";
        Date currentTime = new Date();
        //相差时间:分钟
        long diff = (currentTime.getTime() - date.getTime()) / (1000 * 60);
        if (diff < 5) {
            return "刚刚";
        } else if (diff < 60) {
            return diff + "分钟前";
        } else if (diff < 60 * 10) {
            diff = (currentTime.getTime() - date.getTime()) / (1000 * 60 * 60);
            return diff + "小时前";
        } else {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            return sdf.format(date);
        }
    }
}
